package cn.ondraw.ragflow.service;

import cn.ondraw.ragflow.pojo.request.*;
import cn.ondraw.ragflow.pojo.response.*;
import cn.ondraw.ragflow.pojo.request.*;
import cn.ondraw.ragflow.pojo.response.*;
import cn.ondraw.ragflow.pojo.request.*;
import cn.ondraw.ragflow.pojo.response.*;
import org.springframework.stereotype.Service;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;

/**
 * 聊天会话服务接口
 */
@Service
public interface SessionRagFlowService {
    /**
     * 创建会话
     *
     * @param chatId  关联的聊天助手 ID
     * @param request 创建会话请求对象
     * @return 创建会话响应对象
     */
    CreateSessionResponse createSession(String chatId, CreateSessionRequest request);

    /**
     * 更新会话
     *
     * @param chatId    关联的聊天助手 ID
     * @param sessionId 要更新的会话 ID
     * @param request   更新会话请求对象
     * @return 更新会话响应对象
     */
    UpdateSessionResponse updateSession(String chatId, String sessionId, UpdateSessionRequest request);

    /**
     * 列出会话
     *
     * @param request 列出会话请求参数对象
     * @return 列出会话响应对象
     */
    ListSessionsResponse listSessions(ListSessionsRequest request);

    /**
     * 删除会话
     *
     * @param chatId  关联的聊天助手 ID
     * @param request 删除会话请求对象
     * @return 删除会话响应对象
     */
    DeleteSessionsResponse deleteSessions(String chatId, DeleteSessionsRequest request);

    /**
     * 与聊天助手对话（流式响应/SSE）
     *
     * @param chatId  关联的聊天助手 ID
     * @param request 对话请求对象
     * @return 对话响应对象
     */
    SseEmitter converseWithAssistant(String chatId, ConverseRequest request);

    /**
     * 创建与代理的会话
     *
     * @param agentId 关联的代理 ID
     * @param request 创建代理会话请求对象
     * @return 创建代理会话响应对象
     */
    CreateAgentSessionResponse createAgentSession(String agentId, CreateAgentSessionRequest request);

    /**
     * 与代理对话（流式响应/SSE）
     *
     * @param agentId 关联的代理 ID
     * @param request 与代理对话请求对象
     * @return 与代理对话响应对象
     */
    SseEmitter converseWithAgent(String agentId, ConverseWithAgentRequest request);

    /**
     * 列出代理会话
     *
     * @param request 列出代理会话请求参数对象
     * @return 列出代理会话响应对象
     */
    ListAgentSessionsResponse listAgentSessions(ListAgentSessionsRequest request);

    /**
     * 删除代理会话
     *
     * @param agentId 关联的代理 ID
     * @param request 删除代理会话请求对象
     * @return 删除代理会话响应对象
     */
    DeleteAgentSessionsResponse deleteAgentSessions(String agentId, DeleteAgentSessionsRequest request);

    /**
     * 生成相关问题
     *
     * @param request 生成相关问题请求对象
     * @return 生成相关问题响应对象
     */
    RelatedQuestionsResponse generateRelatedQuestions(RelatedQuestionsRequest request);

}
